/*
 * Copyright 2004 original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.jbfilter.impl;

import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Junction;
import org.jbfilter.core.FilterComponent;
import org.jbfilter.core.fcomps.logic.DynamicLogicFilterComponent;
import org.jbfilter.hibernate.FilterComponentHibernate;

class _DynamicLogicFilterComponentHibernateSupport<E, C extends DynamicLogicFilterComponent<E>>
	extends _FilterComponentHibernateSupport<E, C>{

	_DynamicLogicFilterComponentHibernateSupport(C filterComponent) {
		super(filterComponent);
	}

	@Override
	protected Criterion buildCriterion() {
		DynamicLogicFilterComponent<E> dlfComp = getFilterComponent();
		Junction junction = null;
		FilterComponentHibernate<E> fcHib;
		for (FilterComponent<E> fc : dlfComp.getFilterComponents()) {
			// the class which uses this support must make sure that this casts works fine
			fcHib = (FilterComponentHibernate<E>)fc;
			Criterion criterion = fcHib.getCriterion();
			if (criterion != null) {
				if (junction == null) {
					junction = _LogicHibernate.fromLogic(dlfComp.getLogic()).getJunction();
				}
				junction.add(fcHib.getCriterion());
			}
		}
		return junction;
	}
}
